void main() {
  // 函数调用
  testPrint();

  print(add(1, 2).toStringAsFixed(2));
}

// 函数定义
void testPrint() {
  print('hello world');
}

// 函数参数，虽然可以参数类型和返回值类型，但是建议写上类型，类型不明确，无法调用指定类型的方法，也容易报错
int add(int a, int b) {
  // return 功能跟 ArkTS 一样，就是返回值
  return a + b;
}

// 可选参数，在参数名后面加个中括号，调用时可以不传递参数
void testOptionalParam({int a = 1, int b = 2}) {
  print('a = $a, b = $b');
}

// 命名参数，调用时需要指定参数名，参数顺序可以不一致
void testNamedParam({int a = 1, int b = 2}) {
  print('a = $a, b = $b');
}

// 匿名函数，没有函数名，赋值给一个变量，变量名就是函数名
var testAnonymousFunc = (int a, int b) {
  return a + b;
};

